草庐IT

c++ - 开始 Code::blocks 和 UnitTest++

全部标签

c++ - 如何判断 stderr 是否已在 Windows 中重定向?

我希望我的程序在stderr连接到控制台时和重定向到文件/管道时具有不同的行为。在Unix系统中,我可以只测试isatty(STDERR_FILENO),但我如何在Windows中执行此操作?MSVCRT也有一个名为_isatty的函数,它不能正常运行(例如DetectNULfiledescriptor(isattyisbogus))。我可以调用任何Windows或NTAPI来测试它吗? 最佳答案 调用GetStdHandle获取标准错误句柄。将该句柄传递给GetFileType以找出它是什么类型的文件。如果返回FILE_TYPE_

c - Malloc 是否分配了比需要的更多的内存?

这是学校的C作业,但我遇到了一些奇怪的事情,我不知道它是否正常。我必须接受命令行参数,一个例子是-ia.b所以在我的程序中,我使用malloc动态分配内存char*fileName=NULL;fileName=malloc(strlen(argv[i])*sizeof(char));//errortestingetcstrcpy(fileName,argv[i]);工作正常,但我通过visualstudio调试器查看内存,这是在内存位置分配的内存位置,对我来说,它需要的空间更大:0x01608b98"ÍÍÍÍÍýýýýB`\x1˜?`\x1\xf1¼O{º"如果我像这样转换malloc

windows - 用于停止和开始运行 Windows 服务的 Wix 自定义操作 - 问题是在哪里调用它们?

我们的安装程序当前“安装”了一个Windows服务exe,即它只是将文件复制到用户的PC上,但并不启动它。然后当我们的应用程序运行时,它将使用InstallUtil多次“安装”该服务,并且该服务的每个实例都将具有不同的服务名称。所以当我们升级我们的应用程序时,我们不知道有多少这些服务正在运行以及它们叫什么-但我们知道它们的服务名称将以“ABCService_”开头。因此,我创建了几个VB.NET自定义操作-一个称为“stopServices”,一个称为“startServices”。第一个将扫描用户的PC以查找以“ABCService_”开头的任何Windows服务,并将其名称存储在临

c++ - 如何确定计算机上安装的物理 RAM? ( Windows )

如何在Windows中使用C++将物理内存安装到我的计算机上?我的意思不仅是可以GlobalMemoryStatusEx()的容量参数,还有已用内存插槽的数量、内存类型(如DDR1/DDR2/DDR3)、插槽类型(DIMM/SO-DIMM)和内存总线的时钟速率。我需要使用SMBIOS吗?或者是否有其他方式获取此信息? 最佳答案 在我的机器上,您请求的大部分信息都可以通过WMI获得。看看Win32_PhysicalMemory和相关类(class)。比如wmicmemorychip在我的机器上的输出是:C:\>wmicmemorych

windows - 在代码管理菜单中恢复visual studio code中删除的文件

我真的很伤心,因为我在VisualStudioCode中不小心删除了3个文件。我是通过左侧的“源代码管理”菜单完成的。现在我的问题...是否有可能恢复我这样删除的3个文件?我将不胜感激,也许您想知道:我使用Windows:-(我试图查看Windows的回收站,但它不在那里。:-( 最佳答案 不,您无法使用VSCode或标准工具恢复这些文件。它们不会放入回收站(或您的操作系统的回收站),而是使用gitclean或gitreset--hard将它们删除。哀悼:-(当然有用于恢复已删除文件的实用程序可能成功也可能不成功,但这超出了这个问题

C fopen 到特定目录

所以我正在尝试创建一个程序,该程序将根据系统是Windows还是Linux更改fopen()函数的文件目录。在我的主要功能中,我通过确定操作系统#ifdef__unixprintf("linuxmachine\n");windows=false;linux=true;#endif#ifdef_WIN32printf("windowsmachine\n");windows=true;linux=false;#endif然后在我打开文件的函数中FILE*fp,*fpo;if((windows==true)&&(linux==false)){fp=fopen("/temp/coursein/

使用 getchar() 读取输入时 Ctrl-Z 表现异常

这个问题在这里已经有了答案:Whydoesn'tgetchar()recognisereturnasEOFontheconsole?(8个答案)关闭5年前。我无法理解CtrlZ的工作方式。请解释以下输出并说明原因。#includeintmain(void){intch,i=0;while((ch=getchar())!=EOF)i++;printf("\n%d",i);return0;}输入1:my^Z输出1:3输入2:my^Zmymy^Z输出2:6输入3:my^Zmymy^Z^Z输出3:6

c - 只需双击即可运行使用 MSYS2 构建的 GTK+ 应用程序

我有一个simplewindow应用程序,使用MSYS2构建,我希望它能够在MSYS2MinGW外壳之外运行,只需双击该应用程序即可。问题是,当我想运行应用程序时,它必须通过MSYSMinGW提示,否则会返回错误。Thecodeexecutioncannotproceedbecauselibgio-2.0-0.dllwasnotfound.Reinstallingtheprogrammayfixthisproblem我尝试包括(通过将文件复制到我的exe的位置)libgio-2.0-0.dll并出现更多错误,表示缺少库。我也包含了这些文件。我已经展示了我在下面包含的文件:libffi-

c - 服务和应用程序之间的命名管道通信

所以我有一个在启动时启动的服务,我有一个应用程序放在启动文件夹中。因此客户端有时会很晚才连接到命名管道的服务器。这是我服务中的代码。hPipe=CreateNamedPipe(TEXT("\\\\.\\pipe\\popupPipe"),PIPE_ACCESS_DUPLEX|PIPE_TYPE_BYTE|PIPE_READMODE_BYTE,//FILE_FLAG_FIRST_PIPE_INSTANCEisnotneededbutforcesCreateNamedPipe(..)tofailifthepipealreadyexists...PIPE_WAIT,1,1024*16,102

c - 当我按下某个键时做些什么?

如何让程序识别我按下的某些键?理解上下文:我想用C做一个游戏(非常基本的游戏),所以为了移动物体,我想按下(WASD),我知道如何移动它,但我不知道如何当按下其中一个键时,让程序明白我想执行某个操作。例如:if(key=="A"){x++}我知道它不会像那样工作,但至少是类似的。 最佳答案 #include#include/*getch()andkbhit()*/intmain(){charc;for(;;){if(kbhit()){c=getch();if(c=='c'){printf("%c\n",c);//morecodehe